"""
    PyPixel(PygameToll)
    @author:Arisu
    @program init: 2024/6/30
    @version:0.1.0
    @recent update:2024/8.29

    @content:
    继承pygame,通过mvc架构实现与补全pygame的常见控制器品类
    更新2d地图实现逻辑等

    @version detail:
    0.0.1: BaseBlock完成 MessageBlock完成
    0.0.2: pygameController完成 基础架构实现
    0.0.3: 按钮完成 按钮动画完成
    0.0.4: imageBlock完成 动画绘制逻辑完成 // 图片切割加载未完成 imageBlock播放未完成
    0.0.5: 图片切割 动画逻辑 动画播放完成
    0.0.5REALISE: 添加了'平滑浮点八向移动'的demo  0.0.5REALISE版本已经具备了基础的游戏设计功能
    --------------------------------------------------------------------------------------------------------------------
    0.1.0: 重构计划开始 改变命名方式:java命名规则-->python命名规则
    0.1.1: 添加单次计时器 添加循环计时器 完成基础Block的制作
    0.1.2: 精灵组管理类制作完成 绘制操作优化 绘制可以随意自定义 提供层级结构绘画(未添加基础的 删改查)
    0.1.3: 动态图片块的基础完成 优化了函数加载逻辑   #(设置部分公共计时器,节约系统计算资源)GroupsManager中添加公共计时器
    0.1.4: 提供自定义的公共计时器(目前公共计时器只支持DynamicImageBlock类更新动画帧)
           动态图片块完成 *(图片的反向自适应大小未完成) 基础文字块基础完成(不支持自动换行)
    0.1.5: 优化TextBlock的draw函数,其余未优化(根据需求,目前只有文字块和控件块需要)
    0.1.6: 完成动态文字块,根据有无限制与限制大小动态调节字体的输出行为 添加多次计时器
    0.1.7: 优化动态文字块的生成模式 完成基础的核心控制块 完成文字按钮部分函数
    0.1.8: 完善升级按钮(点击,松开,移入,移出) 完善松开鼠标事件监控 完成简单按钮
    0.1.9: 完成选择按钮 优化文字类控件的更新方式 增加脏更新概念 添加帧率显示
    0.2.0: 重构计划结束 完成重构0.0.5REALISE所有内容 0.2.0REALISE已经具备了基础的游戏设计功能
    0.2.1: 修复一些小bug 优化了图像的生产方式 显式精灵组panel大体完成
    0.2.2: 优化了Panel的子元素的移动逻辑
    0.2.3: 创建了进度条bar
    0.2.4: 创建了列表,支持滑动,点击等特性 修复了bar的滑动定位 修复了Panel的初始画布
    0.2.5: 创建了可编辑文本框 新版设计结束,由于使用较为落后的帧动画,不同性能的机器上会出现不同的运行速度和结果,故该版本结束维护

    * 未优化项目
        ,重复的设置dirty影响效率,设置方法:
            1:(元dirty: 元dirty函数为基础的脏修改函数,使用元dirty函数的函数不需要设置为脏函数)
            2:(最大dirty: 只有能够被调用的核心函数设置成dirty,其他不变)
        ,聚焦focus有逻辑问题,单独设置layer层
        ,***创建一个画布块,提前绘制上去后可以调用
        ,***这个引擎的缺点是及其依赖帧,任何更新行为都是以帧为目标进行的,帧数会影响更新差异
        ,优化动态文字块的绘制: 在原有的surface上进行增加删除的绘制, 节省性能
        ,实现碰撞检测优化 --> 空间划分算法优化碰撞检测研究（网格划分 四叉树 八叉树 层次包围盒树BVH）
        ,摄像机:
             offset = pygame.math.Vector2()
            offset.x = player.rect.centerx - self.setting.windowWidth / 2
            offset.y = player.rect.centery - self.setting.windowHeight / 2

            offset_rect = bk.rect.copy()  # bk变为需要管理的组
            offset_rect.center -= offset
    * 已优化项目
        ,用脏精灵的概念实现对图像的重加载,节省运算时间 *优化 在按钮等控件上实现
        ,优化draw函数,先提前绘制在精灵的image上,每次update只用绘制精灵的image节省性能(预渲染)  *优化,每次提前绘制surf
        ,*/将添加动画/添加事件转换成任意参数支持(over)
        ,重构Controller的run()函数, *未优化 可以继承controller随意更改
        ,加入pygameSprite特性  *基于sprite
        ,优化block的继承  *通过内置的_type区分
        ,取消BlockType的区分方式  *优化 用于自动添加组(GroupsManager)
        ,改为更多的类  *添加不同用处的拓展类
        ,升级img相关的支持,添加更多的图片加载方式  * 优化图形加载支持
        ,改变命名方式 java命名 --> python命名  *仍然可以简化
        ,修正图片等的rect与实际rect不符的问题
        ,没有考虑绘制顺序问题,导致本应该被绘制在顶部的图片被覆盖  *layer层级结构
        ,多个按钮无法堆叠(类外自定义函数self与类内隐藏self冲突导致)  *堆叠但只会调用最顶层按钮
        ,自定义函数不支持除self以外的其他参数  *架构导致,无法更改
        ,在run里面添加控件的自定义函数的调用  *控件内部自己调用
        ,setting要单独放出来,方便在任何地方直接调用  *单独的设置类
        ,deleteCell未改动  *accomplish
        ,将实用功能addAnimation转换到Block中,方便更合理地调用
        ,设计一个帧定时器,返回bool,每一帧加一  *单次计时器, 循环计时器, 次数计时器
        ,设计一个专门的timer类简化动画播放的逻辑
            timerMap: self.timers = {'tool use': Timer(350,self.use_tool)}
            timerUse: if keys[pygame.K_SPACE]: self.timers['tool use'].activate()
        ,移除或者强化没用起到作用的Logger和Point  *去除logger和point


"""